package edu.fdzc.springboot01.controller;

import edu.fdzc.springboot01.entity.User;
import edu.fdzc.springboot01.service.UserService;
import edu.fdzc.springboot01.utils.ResultUtil;
import edu.fdzc.springboot01.vo.UserVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    private static final Logger logger = LoggerFactory.getLogger(UserController.class);

    @Autowired
    private UserService userService;

    @GetMapping
    public Object getAllUsers() {
        logger.info("开始查询所有用户...");
        List<User> users = userService.list();
        logger.info("查询完成，共返回 {} 个用户", users.size());
        return ResultUtil.success(users);
    }

    @GetMapping("/{id}")
    public Object getUserById(@PathVariable Integer id) {
        logger.info("开始查询用户，ID={}", id);
        User user = userService.getById(id);
        if (user != null) {
            logger.info("查询成功，用户: {}", user.getUserName());
        } else {
            logger.warn("查询失败，用户ID={} 不存在", id);
        }
        return ResultUtil.success(user);
    }

    @GetMapping("/{id}/with-dept")
    public Object getUserWithDept(@PathVariable Integer id) {
        logger.info("开始查询用户(带部门信息)，ID={}", id);
        UserVo userVo = userService.getByIdWithDept(id);
        if (userVo != null) {
            logger.info("查询成功，用户: {}", userVo.getUserName());
        } else {
            logger.warn("查询失败，用户ID={} 不存在", id);
        }
        return ResultUtil.success(userVo);
    }

    @GetMapping("/dept/{deptId}")
    public Object getUsersByDeptId(@PathVariable Integer deptId) {
        logger.info("开始查询部门ID={} 下的所有用户", deptId);
        List<UserVo> users = userService.getUsersByDeptId(deptId);
        logger.info("查询完成，部门ID={} 下共有 {} 个用户", deptId, users.size());
        return ResultUtil.success(users);
    }

    @GetMapping("/dept/{deptId}/with-dept")
    public Object getUsersWithDeptByDeptId(@PathVariable Integer deptId) {
        logger.info("开始查询部门ID={} 下的所有用户(带部门信息)", deptId);
        List<UserVo> users = userService.getUsersByDeptId(deptId);
        logger.info("查询完成，部门ID={} 下共有 {} 个用户", deptId, users.size());
        return ResultUtil.success(users);
    }

    @PostMapping
    public Object addUser(@RequestBody User user) {
        logger.info("开始添加用户: {}", user.getUserName());
        boolean success = userService.save(user);
        if (success) {
            logger.info("添加用户成功，ID={}", user.getId());
        } else {
            logger.error("添加用户失败，用户信息: {}", user);
        }
        return success ? ResultUtil.success() : ResultUtil.fail();
    }

    @PutMapping("/{id}")
    public Object updateUser(@PathVariable Integer id, @RequestBody User user) {
        logger.info("开始更新用户，ID={}，更新内容: {}", id, user);
        user.setId(id);
        boolean success = userService.updateById(user);
        if (success) {
            logger.info("更新用户成功，ID={}", id);
        } else {
            logger.error("更新用户失败，ID={} 可能不存在", id);
        }
        return success ? ResultUtil.success() : ResultUtil.fail();
    }

    @DeleteMapping("/{id}")
    public Object deleteUser(@PathVariable Integer id) {
        logger.info("开始删除用户，ID={}", id);
        boolean success = userService.removeById(id);
        if (success) {
            logger.info("删除用户成功，ID={}", id);
        } else {
            logger.error("删除用户失败，ID={} 可能不存在", id);
        }
        return success ? ResultUtil.success() : ResultUtil.fail();
    }
}